package thread;

/**
 * 多线程
 * 线程:一个单一的顺序执行流程就是一个线程
 * 多线程：多个线程并发执行
 * 并发执行：CPU在每个线程间快速切换运行，造就一种感官同时运行的效果，
 *          即：微观世界每个线程的代码都是走走停停的(CPU执行哪个线程的
 *          代码时其它线程的代码都不会执行)。宏观感觉在一起运行的现象
 * 使用多线程可以改变程序的执行方式，从原有的单一顺序执行(代码从上至下
 * 一句一句执行)改变为多个代码片段"同时"执行，使得代码执行时互相不牵绊
 *
 * 当有多个代码片段需要"同时"运行时，只需要将它们放在不同的线程上,并让
 * 这些线程运行起来，他们就会并发运行了
 * 创建线程的方式有两种，方式一:
 * 继承Thread并重写run方法(run方法中就是该线程要执行的任务代码)
 */
class ThreadDemo1 {
    public static void main(String[] args) {
        Thread t1 = new MyThread1();
        Thread t2 = new MyThread2();
        t1.start();
        t2.start();
    }
}

/**
 * 第一种创建线程的方式优点是结构简单，利于使用匿名内部类形式创建
 * 缺点有两个:
 * 1：由于java是单继承的，这导致如果继承了Thread就无法在继承其他的类
 * 去复用方法，实际开发很不方便
 * 2：定义线程的同时重写run方法，将线程要执行的任务定义在了线程中，这导致
 * 线程与任务帮定在了一起，不利于现成的重（chong）用
 */
class MyThread1 extends Thread{
    public void run(){
        for (int i=0;i<100;i++){
            System.out.println("你是谁呀？");
        }
    }
}
class MyThread2 extends Thread{
    public void run(){
        for (int i=0;i<100;i++){
            System.out.println("FBI,open the door");
        }
    }
}
